#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2020/7/7 14:11
# @Author  : CoderCharm
# @File    : views.py
# @Software: PyCharm
# @Desc    :
"""

"""
from ..rbacm.crud.role import comm,uuser,sstat,ppos

"""
编写视图
"""
from datetime import timedelta
from typing import Any, Union
from .schemas import role_schema
from sqlalchemy.orm import Session
from fastapi import APIRouter, Depends, Query

from api.common import deps
from api.utils import response_code
from api.common import logger
from .crud import curd_role


router = APIRouter()
"""
角色表

RoleCreate  角色表的字段
create      角色表封装的创建
query_all   角色表封装的获取分页数据
创建路由
/add/addrole
获取路由
/add/query

"""


# 添加角色
@router.post('/add/addrole',summary="添加角色")
async def add_role(
    # role_info 是参数
    role_info:role_schema.RoleCreate,
    # 指定数据库连接
    db:Session=Depends(deps.get_db),):
    curd_role.create(db=db,obj_in=role_info)
    return response_code.resp_200(message='添加角色成功')


# 获取角色列表
@router.get("/add/query", summary="查询角色表")
async def query_category(
        # role_info 是参数
        page:int= Query(1,ge=1,title="当前页"),
        page_size:int=Query(10,le=50,title="页码长度"),
        # 指定数据库连接
        db: Session = Depends(deps.get_db),
):
    response_result = curd_role.query_all(db, page=page,page_size=page_size)
    return response_code.resp_200(data=response_result)


"""
穿梭框

二级分类资源表的路由
/gettworesource

通过角色id获取对应的资源
/getRoleResource

确认角色资源更改路由
/setResource

"""


# 二级分类
@router.get('/gettworesource',summary="获取二级资源表")
async def gettworesource(
    # 指定数据库连接
    db: Session = Depends(deps.get_db),
):
    res=curd_role.queryall_resource(db)
    return response_code.resp_200(data=res)

# 通过角色id获取对应的资源
@router.get('/getRoleResource',summary='通过角色id获取对应的资源')
async def getRoleResource(
        db:Session=Depends(deps.get_db),
        roleid:int=0
):
    res=curd_role.get_roleresource(db,roleid=roleid)
    print('111',res)
    return response_code.resp_200(data=res)



#角色配置确定资源
@router.get("/setResource", summary="添加角色资源")
async def setrolerescours(
        # resource_info:role_schema.StudentCreate,
        db: Session = Depends(deps.get_db),
        roleid:int=0,
        idlist:str=''
):
    response_result = curd_role.setResource(db,roleid=roleid,idlist=idlist)
    if response_result:
        return response_code.resp_200(message=response_result)
    else:
        return response_code.resp_1001(data=response_result, message="资源存在互斥")


# ------------------------------------------
"""
资源表

Role_Resource  资源表的字段
create_zi      资源表封装的创建
query_restype  资源表封装的获取分页数据
创建路由
/add/response
获取路由
/gett/response/role

"""
# 添加资源表
@router.post('/add/response',summary="添加角色资源")
async def add_role(
    # role_info 是参数
    role_info:role_schema.Role_Resource,
    # 指定数据库连接
    db:Session=Depends(deps.get_db),):
    curd_role.create_zi(db=db,obj_in=role_info)
    return response_code.resp_200(message='添加角色资源表成功')

# 获取角色资源
@router.get('/gett/response',summary="获取角色资源")
async def gett_response(
    page:int=1,
    page_size:int=3,
    # 指定数据库连接
    db: Session = Depends(deps.get_db),
):
    res=curd_role.query_restype(db,page=page,page_size=page_size)
    return response_code.resp_200(data=res)



#-------------------------------------------------------------------------
"""
公司管理

company_table  公司表的字段
create_mange   公司表封装的创建
query_mage     公司表封装的获取分页数据
创建路由
/add/response/role
获取路由
/gett/response/role
"""

# 公司管理创建
@router.post('/add/response/role',summary="添加角职务管理")
async def add_role(
    # role_info 是参数
    role_info:role_schema.company_table,
    # 指定数据库连接
    db:Session=Depends(deps.get_db),):
    comm.create_mange(db=db,obj_in=role_info)
    return response_code.resp_200(message='添加职务管理成功')

# 公司管理获取
@router.get('/gett/response/role',summary="获取职务资源")
async def gett_response(
    page:int=1,
    page_size:int=3,
    # 指定数据库连接
    db: Session = Depends(deps.get_db),
):
    res=comm.query_mage(db,page=page,page_size=page_size)
    return response_code.resp_200(data=res)



# ------------------------------

"""
用户管理创建
Users_table  用户表的字段
create_users  用户表封装创建的方法
query_user  用户表封装获取分页数据的方法

创建用户管理的路由
/add/user
获取用户管理的路由
/gett/user  
"""

# 用户管理创建
@router.post('/add/user',summary="添加用户管理")
async def add_role(
    # role_info 是参数
    role_info:role_schema.Users_table,
    # 指定数据库连接
    db:Session=Depends(deps.get_db),):
    print(role_info)
    uuser.create_users(db=db,obj_in=role_info)
    return response_code.resp_200(message='添加用户管理成功')

# 用户管理获取
@router.get('/gett/user',summary="获取管理资源")
async def gett_user(
    page:int=1,
    page_size:int=3,
    # 指定数据库连接
    db: Session = Depends(deps.get_db),
):
    res=uuser.query_user(db,page=page,page_size=page_size)
    return response_code.resp_200(data=res)



#--------------------------------------------------

"""
岗位表
Station_table  岗位表的字段
create_station  岗位表封装的创建
query_station  岗位表封装的获取分页数据
创建路由
/add/station
获取路由
gett/station
"""

# 岗位创建
@router.post('/add/station',summary="添加岗位资源")
async def add_role(
    # role_info 是参数
    role_info:role_schema.Station_table,
    # 指定数据库连接
    db:Session=Depends(deps.get_db),):
    sstat.create_station(db=db,obj_in=role_info)
    return response_code.resp_200(message='添加岗位资源表成功')
#  岗位获取
@router.get('/gett/station',summary="获取岗位")
async def gett_response(
    page:int=1,
    page_size:int=3,
    # 指定数据库连接
    db: Session = Depends(deps.get_db),
):
    res=sstat.query_station(db,page=page,page_size=page_size)
    return response_code.resp_200(data=res)

# ----------------
"""
职务表
Position_table  职务表的字段
create_ppos   职务表封装创建职务
query_ppos   获取职务的所有数据(分页)的数据

创建路由
/add/position
获取路由
/gett/position

"""

# 职务
@router.post('/add/position',summary="添加岗位资源")
async def add_role(
    # role_info 是参数
    role_info:role_schema.Position_table,
    # 指定数据库连接
    db:Session=Depends(deps.get_db),):
    ppos.create_ppos(db=db,obj_in=role_info)
    return response_code.resp_200(message='添加岗位资源表成功')
#  职务岗位获取
@router.get('/gett/position',summary="获取职务")
async def gett_position(
    page:int=1,
    page_size:int=3,
    # 指定数据库连接
    db: Session = Depends(deps.get_db),
):
    res=ppos.query_ppos(db,page=page,page_size=page_size)
    return response_code.resp_200(data=res)



@router.get('/get/eee',summary="获取管理资源")
async def getat_user(
    db: Session = Depends(deps.get_db),
):
    res=uuser.query_userzzz(db)
    return response_code.resp_200(data=res)

def getData(data):
    if len(data)<=0:
        return []
    # 定义两个列表
    # testlist = [{"id": 1, "name": '用户管理', "pid": 1, "pname": '菜单管理'},{"id": 2, "name": "用户11管理", "pid": 2, "pname": '用户管理'}]
    # 一个列表存放pid
    idlist = []
    reslist = []
    for i in data:
        if i['pid'] not in idlist:
            reslist.append({"id": i['pid'], "name": i['pname'], "son": [{"id": i['id'], 'name': i['name'],'url':i['url']}]})
            idlist.append(i['pid'])
        else:
            index = idlist.index(i['pid'])
            reslist[index]['son'].append({"id": i['id'], 'name': i['name'],'url':i['url']})
        return reslist




# 获取侧边栏的数据
@router.get('/getMenu',summary='侧边栏的数据')
async def getMenu(
        db:Session=Depends(deps.get_db),
        roleid:int=0
):

    res=uuser.getMenu(db,roleid=roleid)
    print('44444',res)
    # data=getData(res)
    return response_code.resp_200(data=res)
